﻿using QuanLyGiaoVuDAL.Repositories.DatabaseRepositories;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace QuanLyGiaoVuService.CommandServices
{
    public class HocKyCommandService : IHocKyCommandService
    {
        private IHocKyRepository _hocKyRepository;

        public HocKyCommandService(IHocKyRepository hocKyRepository)
        {
            _hocKyRepository = hocKyRepository;
        }

        public QuanLyGiaoVuDAL.DTO.HocKyDTO InsertHocKy(QuanLyGiaoVuDAL.DTO.HocKyDTO hocKyDTO)
        {
            var dsHocKy = _hocKyRepository.GetAllHocKy().ToList();
            bool allowInsert = dsHocKy.FindIndex(hk => hk.TenHocKy == hocKyDTO.TenHocKy && hk.MaNamHoc == hocKyDTO.MaNamHoc) == -1;

            if (!allowInsert)
                throw new ArgumentException("Học kỳ này đã tồn tại trong hệ thống.");
            if (hocKyDTO.MaHocKy.Equals(Guid.Empty))
                hocKyDTO.MaHocKy = Guid.NewGuid();
            return _hocKyRepository.InsertHocKy(hocKyDTO);
        }

        public bool DeleteHocKyById(Guid id)
        {
            return _hocKyRepository.DeleteHocKy(id);
        }


        public QuanLyGiaoVuDAL.DTO.NamHocDTO InsertNamHoc(QuanLyGiaoVuDAL.DTO.NamHocDTO namHocDTO)
        {
            var dsNamHoc = _hocKyRepository.GetAllNamHoc().ToList();
            bool allowInsert = dsNamHoc.FindIndex(nh => nh.Nam1 == namHocDTO.Nam1 && nh.Nam2 == namHocDTO.Nam2) == -1;
            if (!allowInsert)
                throw new ArgumentException("Năm học này đã tồn tại trong hệ thống.");
            if (namHocDTO.Nam1 >= namHocDTO.Nam2)
                throw new ArgumentException("Năm học sau phải lớn hơn năm học trước.");
            if (namHocDTO.MaNamHoc.Equals(Guid.Empty))
            {
                namHocDTO.MaNamHoc = Guid.NewGuid();
            }
            return _hocKyRepository.InsertNamHoc(namHocDTO);
        }

        public bool DeleteNamHocById(Guid id)
        {
            return _hocKyRepository.DeleteNamHoc(id);
        }
    }
}
